-- Determine le scope de project_id 
-- sur lesquels on lance la requete
WITH SCOPE_PROJECT AS
(
    Select 
         INV.ID
        ,INV.CODE
        ,INV.NAME as INV_NAME
        ,PPF.IS_ACTIVE
        ,PPF.NAME as PPF_NAME
        ,PPF.CODE as PPF_CODE
    FROM nikuprd.INV_INVESTMENTS INV
    JOIN nikuprd.PFM_INVESTMENTS PPC
        ON PPC.INVESTMENT_ID = INV.ID
    JOIN nikuprd.PFM_PORTFOLIOS PPF
        on PPF.ID = PPC.PORTFOLIO_ID 
    WHERE   
        PPF.CODE = 'PLAN VTRAVAIL'
        AND PPF.IS_ACTIVE = '1'
)
,CL_CCN AS
(
	SELECT
		CL.lookup_code
		,CL.lookup_type
		,CL.is_active
		,CCN.table_name
		,CCN.name
	FROM nikuprd.CMN_LOOKUPS 		CL
	INNER JOIN nikuprd.CMN_CAPTIONS_NLS	CCN
		ON CCN.pk_id = CL.id
		AND CCN.language_code = 'fr'
		AND CCN.table_name = 'CMN_LOOKUPS'
  WHERE CL.lookup_type in ('MA_LKP_LIGNE_DDSIG')
)
Select
    INV.PPF_CODE
    ,INV.ID
    ,INV.CODE
    ,proj.prname as proj_name
    ,proj.Is_Active as proj_actif
    ,TASK.prname as task_name
    ,TASK.prstart as task_start_date
    ,TASK.PRFINISH as task_end_date
    ,task.PRCATEGORY as code_tache
    ,substr(upper(task.PRCATEGORY),1,3)  as code_majeur
    ,codcat_lvl1.DESCRIPTION             as code_majeur_label
    ,substr(upper(task.PRCATEGORY),5,3)  as code_mineur
    ,codcat_lvl2.DESCRIPTION             as code_mineur_label
    ,substr(upper(task.PRCATEGORY),9,3)  as code_tierce
    ,codcat_lvl3.DESCRIPTION             as code_tierce_label
    ,AF_ASSI.SLICE_DATE
    ,AF_ASSI.AFACTUAL
    ,AF_ASSI.AFESTIMATE
    ,CASE WHEN upper(INV.PPF_CODE) = 'PLAN VTRAVAIL' then 
            CASE WHEN SYSDATE - 1 >= AF_ASSI.SLICE_DATE THEN AF_ASSI.AFESTIMATE ELSE 0 END
          ELSE 
            CASE WHEN to_date(20231231,'yyyymmdd') <= AF_ASSI.SLICE_DATE THEN AF_ASSI.AFESTIMATE ELSE 0 END
          END
     as AFESTIMATE_PAST
    ,TO_NUMBER(TO_CHAR(NVL(AF_ASSI.SLICE_DATE, TASK.prstart),'YYYY')) as TASK_START_YEAR
    ,TO_NUMBER(TO_CHAR(NVL(AF_ASSI.SLICE_DATE, TASK.prstart),'MM')) as TASK_START_MONTH
    ,RESS.PRCATEGORY
    ,RESS.PRISROLE
    ,RESS.PRNAME
    ,RESS.IS_ACTIVE AS RESSOURCE_IS_ACTIVE
    ,UPPER(RESS.PREXTERNALID) AS PREXTERNALID
    ,UPPER(SUBSTR(RESS.PrUserText2, 1,7)) as SA
    ,UPPER(RESS.PRUSERTEXT1) AS SOCIETE
    ,CA_RESS.MA_PRJ_TYP_RES
    ,CA_RESS.TYPE_PRESTATION_AFF
    ,RESS_lvl2.FULL_NAME AS RESSOURCE_PILOTE_NAME
    ,ROLE.prname as ROLE_NAME
    ,CL_CCN_RESS.NAME as DDSI_NAME
    ,CL_CCN_RESS.LOOKUP_CODE AS DDSI_CODE
from SCOPE_PROJECT INV
JOIN nikuprd.PRPROJECT PROJ
ON PROJ.prExternalID = INV.CODE
-- On ajoute les taches a la vue projet
JOIN nikuprd.PRTASK TASK
ON TASK.prProjectId  = PROJ.prID
-- On ajoute les assignements pour les taches
LEFT JOIN NIKUPRD.PRASSIGNMENT PR_ASSI
    ON PR_ASSI.PRTASKID = TASK.PRID
LEFT JOIN adm_bo.AFASSIGNMENT_C AF_ASSI
    ON AF_ASSI.PRJ_OBJECT_ID = PR_ASSI.PRID
-- On ajoute les ressources associees à chacune des taches
JOIN NIKUPRD.PRRESOURCE RESS
    ON RESS.PRID = PR_ASSI.PRRESOURCEID
JOIN nikuprd.ODF_CA_RESOURCE CA_RESS
    ON RESS.PRID = CA_RESS.ID
LEFT JOIN NIKUPRD.SRM_RESOURCES RESS_lvl1
    ON RESS.PREXTERNALID= RESS_lvl1.UNIQUE_NAME
LEFT JOIN NIKUPRD.SRM_RESOURCES RESS_lvl2
    ON RESS_lvl1.MANAGER_ID = RESS_lvl2.USER_ID
LEFT JOIN NIKUPRD.PRRESOURCE ROLE
    ON ROLE.PRID = RESS.PRPRIMARYROLEID
LEFT JOIN CL_CCN CL_CCN_RESS
    ON UPPER(SUBSTR(CL_CCN_RESS.Name,1,4)) = UPPER(RESS.PrUserText2)
    AND CL_CCN_RESS.lookup_type = 'MA_LKP_LIGNE_DDSIG'
    AND CL_CCN_RESS.IS_ACTIVE = 1
-- Ajout des codes de categorie des tâches
left join ADM_BO_PILOTAGE.PIL_CODES_CATEGORIE codcat_lvl1
    on substr(upper(task.PRCATEGORY),1,3)= codcat_lvl1.CODE_CATEGORIE
    and codcat_lvl1.niveau = 1 
left join ADM_BO_PILOTAGE.PIL_CODES_CATEGORIE codcat_lvl2
    on substr(upper(task.PRCATEGORY),5,3)= codcat_lvl2.CODE_CATEGORIE
    and codcat_lvl2.niveau = 2 
left join ADM_BO_PILOTAGE.PIL_CODES_CATEGORIE codcat_lvl3
    on substr(upper(task.PRCATEGORY),9,3)= codcat_lvl3.CODE_CATEGORIE
    and codcat_lvl3.niveau = 3 
WHERE 
    1=1
    AND UPPER(RESS.PrExternalID) not like 'MA_ACC%' 
    -- On ne prend que les Assignement >= Current-year-1
    AND (
        TO_NUMBER(TO_CHAR(NVL(AF_ASSI.SLICE_DATE, TASK.prstart),'SYYYY'))>=  
        DECODE(0, 0, 2026-1,2026-2)
        )
ORDER BY INV.CODE DESC,TASK_NAME,ress.prname
